package com.kty.methods.sjqm.method.entrance;

import com.kty.cesuan.pojo.Qmdj;
import com.kty.methods.sjqm.method.qmdj.QiMen;
import com.kty.methods.utils.Utils;
import com.nlf.calendar.Lunar;
import com.nlf.calendar.Solar;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;

public class QiMenDunJia {

    /**
     * ★入口：信息封装
     */
    public void run(QiMen qiMen) {
        // 信息封装
        infoEncapsulation(qiMen);
    }

    /**
     * 信息封装
     */
    protected void infoEncapsulation(QiMen qiMen){

        // ①设置信息（顺序必须一致）
        qiMen.zhengShou(); // 获取并设置【正授】
        qiMen.chaoShen(); // 获取并设置【超神】

        qiMen.solarDate(); // 获取并设置【公历日期】
        qiMen.lunarDateStr(); // 获取并设置【农历日期】
        qiMen.baZi(); // 获取并设置【八字】
        qiMen.baZiWuXing(); // 获取并设置【八字五行】
        qiMen.baZiNaYin(); // 获取并设置【八字纳音】
        qiMen.jieQi(); // 获取并设置【节气】
        qiMen.yinYangDun(); // 获取并设置【阴阳遁】
        qiMen.fuTou(); // 获取并设置【符头】
        qiMen.sanYuan(); // 获取并设置【上\中\下元】
        qiMen.isFlagSanYuan(); // 二次判断【上中下元】正确性：根据符头再次判断
        qiMen.juNumber(); // 获取并设置【局数】
        qiMen.sanQiLiuYi(); // 获取并设置【三奇六仪】
        qiMen.liuJiaYinWei(); // 获取并设置【六甲隐位】
        qiMen.diPan(true); // ★获取并设置【地盘】
        qiMen.xunShou(); // 获取并设置【旬首】
        qiMen.fuShi(3); // 获取并设【值符】与【值使】
        qiMen.newGongWei(); // 获取并设置【值符(九星之一)】落入地盘的宫位 <旋转后>
        qiMen.jiuXingSanQiLiuYi(); // 设置【九星】落入地盘中的'三奇六仪'信息 <旋转前>
        qiMen.tianPan(true); // ★设置【九星】落入地盘信息 <旋转后>
        qiMen.shenPan(true); // ★获取并设置【神盘】
        qiMen.renPan(true, false); // ★获取并设置【人盘】

    }

//**********************************************************************************************************************

    /**
     * 保存至数据库（所有信息）
     */
    private String allInfoToSql(QiMen qiMen) {

        Lunar lunarDate = qiMen.getLunarDate(); // 获取农历日期
        Solar solarDate = lunarDate.getSolar(); // 获取公历日期
        String baZi = qiMen.getBaZi(); // 获取八字
        String baZiWuXing = qiMen.getBaZiWuXing(); // 获取八字五行
        String baZiNaYin = qiMen.getBaZiNaYin(); // 获取八字纳音

        String zhengShou = Utils.isFlag(qiMen.getZhengShou()); // 是否为'正授'
        String chaoShen = Utils.isFlag(qiMen.getChaoShen()); // 是否为'超神'

        String jieQi = qiMen.getJieQi() + Utils.sanYuan(qiMen.getSanYuan()); // 获取节气
        String yinYangDun = qiMen.getYinYangDun() + Utils.shuToHan(qiMen.getJuNumber()) + "局"; // 阴阳遁和局数
        String fuTou = qiMen.getFuTou(); // 获取符头
        String xunShou = qiMen.getXunShou(); // 获取旬首
        String zhiFu = qiMen.getZhiFu(); // 获取值符
        String zhiShi = qiMen.getZhiShi(); // 获取值使

        String tianPan = Arrays.toString(qiMen.getTianPan()); // 获取天盘
        String diPan = Arrays.toString(qiMen.getDiPan()); // 获取地盘
        String renPan = Arrays.toString(qiMen.getRenPan()); // 获取人盘
        String shenPan = Arrays.toString(qiMen.getShenPan()); // 获取神盘

        return "★【公历日期：" + solarDate + "】\n" +
                "★【农历日期：" + lunarDate + "】\n" +
                "【八字：" + baZi + "】\n" +
                "【八字五行：" + baZiWuXing + "】\n" +
                "【八字纳音：" + baZiNaYin + "】\n" +
                "【正授：" + zhengShou + "】\n" +
                "【超神：" + chaoShen + "】\n" +
                "【节气：" + jieQi + "】\n" +
                "【阴阳遁：" + yinYangDun + "】\n" +
                "【符头：" + fuTou + "】\n" +
                "【旬首：" + xunShou + "】\n" +
                "【值符：" + zhiFu + "】\n" +
                "【值使：" + zhiShi + "】\n" +
                "【★天盘：" + tianPan + "】\n" +
                "【★地盘：" + diPan + "】\n" +
                "【★人盘：" + renPan + "】\n" +
                "【★神盘：" + shenPan + "】";

    }

    /**
     * 保存至数据库（分段信息）
     */
    public Qmdj infoToSql(QiMen qiMen) {

        Qmdj qmdj = new Qmdj();

        // 设置信息
        qmdj.setId(Utils.getId(4)); // 设置id
        qmdj.setSolarDate(qiMen.getSolarDate()); // 设置公历日期
        qmdj.setLunarDate(qiMen.getLunarDateStr()); // 设置农历日期
        qmdj.setBaZi(qiMen.getBaZi()); // 设置八字
        qmdj.setBaZiWuXing(qiMen.getBaZiWuXing()); // 设置八字五行
        qmdj.setBaZiNaYin(qiMen.getBaZiNaYin());  // 设置八字纳音
        qmdj.setZhengShou(Utils.isFlag(qiMen.getZhengShou())); // 设置是否为'正授'
        qmdj.setChaoShen(Utils.isFlag(qiMen.getChaoShen())); // 设置是否为'超神'
        qmdj.setJieQi(qiMen.getJieQi() + Utils.sanYuan(qiMen.getSanYuan())); // 设置'节气'
        qmdj.setYinYangDun(qiMen.getYinYangDun() + Utils.shuToHan(qiMen.getJuNumber()) + "局"); // 设置'阴阳遁'
        qmdj.setFuTou(qiMen.getFuTou()); // 设置'符头'
        qmdj.setXunShou(qiMen.getXunShou()); // 设置'旬首'
        qmdj.setZhiFu(qiMen.getZhiFu()); // 设置'值符'
        qmdj.setZhiShi(qiMen.getZhiShi()); // 设置'值使'
        qmdj.setTianPan(Arrays.toString(qiMen.getTianPan())); // 设置'天盘'
        qmdj.setDiPan(Arrays.toString(qiMen.getDiPan())); // 设置'地盘'
        qmdj.setRenPan(Arrays.toString(qiMen.getRenPan())); // 设置'人盘'
        qmdj.setShenPan(Arrays.toString(qiMen.getShenPan())); // 设置'神盘'
        qmdj.setAllInformation(allInfoToSql(qiMen)); // 设置所有信息
        qmdj.setCreateTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒"))); // 设置操作时间

        return qmdj;

    }

}
